package com.beautify.qrcode.struct;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONObject;

import com.beautify.qrcode.constants.TemplateConstant;

/**
 * 图元模板加载类
 *
 * @author keia
 * @since 2022/1/15 21:05
 */
public class TemplateTypeService {

    /**
     * 模板类型集合
     */
    private static final Map<String,ITemplateType> TEMPLATE_TYPE_MAP = new HashMap<>();

    static {
        File templateFilePath = FileUtil.file(TemplateConstant.TEMPLATE_PATH);
        File[] templateFileList = templateFilePath.listFiles();
        for(File templateFile: templateFileList){
            System.out.println(templateFile.getName());
            ITemplateType value = TEMPLATE_TYPE_MAP.computeIfAbsent(templateFile.getName(),key -> new CommonTemplateType());

            value.addTemplateName(templateFile.getName());
            String rulePath = TemplateConstant.TEMPLATE_PATH + value.getTemplateName() +"/"+ TemplateConstant.RULE_FILE_NAME;
            value.addRule(rulePath);
            File[] structFileList = templateFile.listFiles();
            List<String> structNameList = new ArrayList<>();
            for(File structFile: structFileList){
                if (!structFile.getName().endsWith(TemplateConstant.IMAGE_TYPE)){
                    continue;
                }
                System.out.println(structFile.getName());
                structNameList.add(structFile.getName());
            }
            value.addStructList(structNameList);
            TEMPLATE_TYPE_MAP.put(value.getTemplateName(), value);
        }
        System.out.println(new JSONObject(TEMPLATE_TYPE_MAP));
    }

    public ITemplateType getTemplate(String templateType) throws Exception{
        if(TEMPLATE_TYPE_MAP.containsKey(templateType)){
            return TEMPLATE_TYPE_MAP.get(templateType);
        }else{
            throw new Exception("图元模板类型不存在");
        }
    }
}
